package com.hspedu.final_;


import java.sql.SQLOutput;

/**
 * @Author Stringzhua
 * @Date 2024/3/5 20:15
 * description:final:最后的最终的
 * final可以修饰类、属性、方法和局部变量
 * 在某些情况下,程序员可能有以下需求,就会使用到final
 * 1.当不希望类被继承时,可以用final修饰
 * 2.当不希望父类的某个方法被子类覆盖/重写(override)时,可以使用final关键字修饰
 * 【访问修饰符 final 返回类型 方法名】
 * 3.当不希望类的某个属性值被修改,可以使用final修饰
 * 【public final double TAX_RATE=0.08】
 * 4.当不希望某个局部变量被修改,可以使用final修饰
 * 【final doouble TAX_RATE=0.08】
 */
public class Final01 {
    public static void main(String[] args) {
        E e = new E();
//        e.TAX_RATE = 0.0;//Cannot assign a value to final variable 'TAX_RATE'
    }
}


//1.如果要求A类不能被其他类修饰
//可以使用final修饰A类
final class A {

}
//class B extends A {}

class C {
    //2.当我们不希望hi()被子类重写时,可以使用final关键字修饰
    public final void hi() {
    }
}

class D extends C {
    //这里重写了C类的hi()方法
//    @Override
//    public void hi() {
//        System.out.println("重写了C类的hi()方法");
//    }
}

class E {
    //    3.当不希望类的某个属性值被修改,可以使用final修饰
    public final double TAX_RATE = 0.08;
}

// 4.当不希望某个局部变量被修改,可以使用final修饰
class F {
    public void cry() {
        //这时,NUM 也成为局部参数
        final double NUM = 0.01;
//        NUM = 0.9;
        System.out.println("NUM = " + NUM);
    }
}